package com.phpleaderpro.GameProgramming;

import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class GameView extends SurfaceView {

	private SurfaceHolder holder;
	private GameLoopThread gameLoopThread;
	private List<Sprite> sprites = new ArrayList<Sprite>();
	private List<TempSprite> temps = new ArrayList<TempSprite>();
	private long lastClick;
	private Bitmap bmpBlood;
	
	public GameView(Context context) {
		super(context);
		gameLoopThread = new GameLoopThread(this);
		holder = getHolder();
		holder.addCallback(new SurfaceHolder.Callback() {
			public void surfaceDestroyed(SurfaceHolder holder) {
				boolean retry = true;
				gameLoopThread.setRunning(false);
				while (retry) {
					try {
						gameLoopThread.join();
						retry = false;
					} catch (InterruptedException e) {
					}
				}
			}

			public void surfaceCreated(SurfaceHolder holder) {
				createSprites();
				gameLoopThread.setRunning(true);
				gameLoopThread.start();
			}

			public void surfaceChanged(SurfaceHolder holder, int format,
					int width, int height) {
			}
		});
		bmpBlood = BitmapFactory.decodeResource(getResources(), R.drawable.blood1);
	}
	private void createSprites()
	{
		for (int i = 0; i < 5; i++) {
			sprites.add(createSprite(R.drawable.bad1));
			sprites.add(createSprite(R.drawable.bad2));
			sprites.add(createSprite(R.drawable.bad3));
			sprites.add(createSprite(R.drawable.bad4));
			sprites.add(createSprite(R.drawable.bad5));
			sprites.add(createSprite(R.drawable.bad6));
			sprites.add(createSprite(R.drawable.good1));
			sprites.add(createSprite(R.drawable.good2));
			sprites.add(createSprite(R.drawable.good3));
			sprites.add(createSprite(R.drawable.good4));
			sprites.add(createSprite(R.drawable.good5));
			sprites.add(createSprite(R.drawable.good6));
		}		
	}
	private Sprite createSprite(int resource)
	{
		Bitmap bmp = BitmapFactory.decodeResource(getResources(), resource);
		return new Sprite(this, bmp);
	}
	@Override
	protected void onDraw(Canvas canvas) {
		canvas.drawColor(Color.BLACK);
		for (int i = temps.size()-1; i >=0; i--) {
			temps.get(i).onDraw(canvas);
		}
		for (Sprite sprite : sprites ){
			sprite.onDraw(canvas);			
		}
	}
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if(System.currentTimeMillis()-lastClick>300)
		{
			lastClick = System.currentTimeMillis();
			float x = event.getX();
			float y = event.getY();
			synchronized (getHolder()) {
				for (int i = sprites.size()-1; i >=0; i--) {
					Sprite sprite = sprites.get(i);
					if(sprite.isCollition(x, y))
					{
						sprites.remove(sprite);
						temps.add(new TempSprite(temps, this, x, y, bmpBlood));
						break;
					}
				}
			}
		}
		return true;
	}
	
}
